package com.glela.goods.mapper;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.github.pagehelper.Page;
import com.glela.goods.model.LimitTimeSaleDetail;
import com.glela.goods.model.po.LimitTimeSaleTitlePo;
import com.glela.goods.model.vo.limitsale.LimitSaleGoodsVo;

public interface LimitTimeSaleDetailMapper {
	LimitTimeSaleDetail selectByPrimaryKey(Integer id);

	/**
	 * <dl>
	 * <dt>昨日精选商品列表</dt>
	 * </dl>
	 * @param yesterDay 昨天时间
	 * @param nowDate 当前时间点
	 * @return Page<LimitTimeSaleDetail>
	 * @author zls
	 * @date 2017年7月13日 上午11:17:27
	 */
	Page<LimitSaleGoodsVo> yesterdaysPick(@Param("yesterDay") Date yesterDay, @Param("nowDate") Date nowDate);

	/**
	 * <dl>
	 * <dt>某分时抢购点下明细</dt>
	 * </dl>
	 * @param limitTimeSaleId 分时抢购id
	 * @param nowDate 当前时间点
	 * @return Page<LimitTimeSaleDetail>
	 * @author zls
	 * @date 2017年7月13日 上午11:41:54
	 */
	Page<LimitSaleGoodsVo> selectGoodsByLimitTimeSaleId(@Param("limitTimeSaleId") int limitTimeSaleId, @Param("nowDate") Date nowDate);

	/**
	 * <dl>
	 * <dt>查询商品分时抢购明细</dt>
	 * </dl>
	 * @param limitTimeSaleId 分时抢购ID
	 * @param goodsId 商品ID
	 * @return List<LimitTimeSaleDetail> 明细
	 * @author zls
	 * @date 2017年7月27日 下午5:30:59
	 */
	List<LimitTimeSaleDetail> selectByLimitSaleIdAndGoodsId(@Param("limitTimeSaleId") int limitTimeSaleId, @Param("goodsId") long goodsId);

	/**
	 * <dl>
	 * <dt>明日预告明细</dt>
	 * </dl>
	 * @param tomorrowDay 明天开始时间
	 * @param afterTomorrowDay 后天开始时间
	 * @param nowDate 当前时间点日期
	 * @return Page<LimitSaleGoodsVo>
	 * @author zls
	 * @date 2017年7月13日 下午4:13:40
	 */
	Page<LimitSaleGoodsVo> tomorrowTrailer(@Param("tomorrowDay") Date tomorrowDay, @Param("afterTomorrowDay") Date afterTomorrowDay, @Param("nowDate") Date nowDate);

	/**
	 * <dl>
	 * <dt>查询明日预告商品总数</dt>
	 * <dd>统计的是商品数不是规格数</dd>
	 * </dl>
	 * @param tomorrowDay 明天开始时间
	 * @param afterTomorrowDay 后天开始时间
	 * @param nowDate 当前时间点日期
	 * @return long
	 * @author zls
	 * @date 2017年7月14日 下午4:12:02
	 */
	Long selectTomorrowTrailerGoodsNums(@Param("tomorrowDay") Date tomorrowDay, @Param("afterTomorrowDay") Date afterTomorrowDay, @Param("nowDate") Date nowDate);

	/**
	 * <dl>
	 * <dt>根据开始时间查询明日预告标题</dt>
	 * </dl>
	 * @param startTime 开始时间
	 * @param afterTomorrow 结束时间
	 * @return List<LimitTimeSaleTitlePo>
	 * @author zls
	 * @date 2017年7月14日 下午8:00:14
	 */
	List<LimitTimeSaleTitlePo> selectTomorrowTrailerTitle(@Param("startTime") String startTime, @Param("afterTomorrow") String afterTomorrow);

	/**
	 * <dl>
	 * <dt>扣减分时抢购限购数</dt>
	 * </dl>
	 * @param userId 购买人ID
	 * @param limitTimeSaleId 分时抢购ID
	 * @param limitTimeSaleDetailId 分时抢购明细ID
	 * @param productId 货品ID
	 * @param inventoryId 库存ID
	 * @param quantity 减少数量
	 * @return int 影响行
	 * @author zls
	 * @date 2017年7月24日 下午9:24:46
	 */
	int updateSubSkuCount(@Param("userId") long userId, @Param("limitTimeSaleId") int limitTimeSaleId, @Param("limitTimeSaleDetailId") int limitTimeSaleDetailId, @Param("productId") long productId, @Param("inventoryId") long inventoryId, @Param("quantity") int quantity);

	/**
	 * <dl>
	 * <dt>添加分时抢购限购数</dt>
	 * </dl>
	 * @param limitTimeSaleId 分时抢购ID
	 * @param goodsId 商品ID
	 * @param productId 货品ID
	 * @param quantity 增加数量
	 * @return int 影响行
	 * @author zls
	 * @date 2017年7月26日 下午4:09:00
	 */
	int updateAddSkuCount(@Param("limitTimeSaleId") int limitTimeSaleId, @Param("goodsId") long goodsId, @Param("productId") long productId, @Param("quantity") int quantity);

	/***
	 * 
	 * 查询该商品在当前时间，是否存在分时抢购 ：按规格ID zyf
	 */
	LimitTimeSaleDetail selectByProductId(Map<String, Object> map);

	/**
	 * 查询商品在指定的一段时间内是否存在分时抢购预热
	 * @return
	 */
	LimitTimeSaleDetail selectByProductIdsAndEndDate(Map<String, Object> map);

	List<LimitTimeSaleDetail> selectByProductIds(@Param("productIds") Set<Long> productIds, @Param("nowTime") Date nowTime);

	/***
	 * 
	 * 查询该商品在当前时间，是否存在分时抢购 ：按商品ID zyf
	 */
	List<LimitTimeSaleDetail> selectByGoodsId(Map<String, Object> map);

	/**
	 * <dl>
	 * <dt>批量查询商品抢购明细</dt>
	 * </dl>
	 * @param goodsIds 商品ID集合
	 * @param time 时间点
	 * @return List<LimitTimeSaleDetail>
	 * @author zls
	 * @date 2017年8月3日 下午6:59:42
	 */
	List<LimitTimeSaleDetail> selectByGoodsIds(@Param("goodsIds") Collection<Long> goodsIds, @Param("time") Date time);

	/***
	 * 
	 * 查询当前产品PRODUCT,是否在进行分时抢购预热 条件: 抢购开始时间大于当前时间，小于当天结束时间，（即 第二天零点。）
	 */
	String selectWarmupByProduct(Map<String, Object> map);

	/***
	 * 查询分时抢购产品列表, 按GOODSID,或者 PRODUCTID limitTimeSaleId ： productId : 产品ID （GOODSID） skuNo : 规格ID （PRODUCTID）
	 * 
	 */
	List<LimitTimeSaleDetail> selectLimitSaleById(Map<String, Object> map);
}